package com.sino.dataworks.common;

import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;

/**
 * 基础 service 类
 *
 * @author mario
 * @since 2020/1/29 23:18
 **/
public interface BaseService<T, ID> {


        /**
         * 保存对象
         * @param t
         * @return
         */
        T save(T t);

        /**
         * 保存 List<对象>
         * @param var1
         * @return
         */
        List<T> saveAll(Iterable<T> var1);

        /**
         * 通过id查找到唯一的对象
         * @param id
         * @return
         */
        T getOne(ID id);
        T findById(ID id);
        /**
         * 通过id删除
         * @param id
         * @return
         */
        void deleteById(ID id);

        /**
         * 通过id删除
         * @param list
         * @return
         */
        void deleteAll(List<T> list);
        /**
         * 通过对象删
         * @param t
         * @return
         */
        void delete(T t);

        /**
         * 通过id查找是否存在该记录
         * @param id
         * @return
         */
        boolean existsById(ID id);

        /**
         * 表中的记录数
         * @return
         */
        long count();

        /**
         * 表中的所有记录
         * @return
         */
        List<T> findAll();
        /**
         * 通过对象查询表中的所有记录
         * @return
         */
        List<T> findAll(T t);

        /**
         * 查找表中所有数据且排序
         * @param var1
         * @return
         */
        List<T> findAll(Sort var1);

        /**
         * 通过list<id> 查找对象集合
         * @param var1
         * @return
         */
        List<T> findAllById(Iterable<ID> var1);

        /**
         * 构造对象条件查找
         * @param var1
         * @return
         */
        List<T> findAll(Example<T> var1);

        /**
         * 构造对象条件查找 且排序
         * @param var1
         * @param var2
         * @return
         */
        List<T> findAll(Example<T> var1, Sort var2);

        /**
         * 分页查找
         * @param var1
         * @return
         */
        Page<T> findAll(Pageable var1);

        /**
         * 分页查找 且带上条件
         * @param var1
         * @param var2
         * @return
         */
        Page<T> findAll(Example<T> var1, Pageable var2);
        /**
         * 分页查找 且带上条件
         * @param var1
         * @param var2
         * @return
         */
        Page<T> findAll(T var1, Pageable var2);

}
